package org.abc.fund.controller.dataSource;

import lombok.RequiredArgsConstructor;
import org.abc.fund.dto.DataSourceConfigDTO;
import org.abc.fund.service.dataSource.DataSourceConfigService;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 数据源配置管理的RESTful API控制器
 * 提供对数据源配置的CRUD操作的端点
 */
@RestController
@RequestMapping("/api/v1/datasource-configs")
@RequiredArgsConstructor
public class DataSourceConfigController {

    private final DataSourceConfigService dataSourceConfigService;

    /**
     * 创建新的数据源配置
     *
     * @param dto 数据源配置DTO
     * @return 创建成功的数据源配置
     */
    @PostMapping
    public ResponseEntity<DataSourceConfigDTO> createDataSourceConfig(@RequestBody DataSourceConfigDTO dto) {
        DataSourceConfigDTO createdConfig = dataSourceConfigService.createDataSourceConfig(dto);
        return new ResponseEntity<>(createdConfig, HttpStatus.CREATED);
    }

    /**
     * 根据ID更新数据源配置
     *
     * @param id  数据源配置ID
     * @param dto 更新后的数据源配置DTO
     * @return 更新成功的数据源配置
     */
    @PutMapping("/{id}")
    public ResponseEntity<DataSourceConfigDTO> updateDataSourceConfig(@PathVariable Long id, @RequestBody DataSourceConfigDTO dto) {
        DataSourceConfigDTO updatedConfig = dataSourceConfigService.updateDataSourceConfig(id, dto);
        return ResponseEntity.ok(updatedConfig);
    }

    /**
     * 根据ID获取数据源配置
     *
     * @param id 数据源配置ID
     * @return 对应的数据源配置
     */
    @GetMapping("/{id}")
    public ResponseEntity<DataSourceConfigDTO> getDataSourceConfigById(@PathVariable Long id) {
        DataSourceConfigDTO config = dataSourceConfigService.getDataSourceConfigById(id);
        return ResponseEntity.ok(config);
    }

    /**
     * 获取所有数据源配置
     *
     * @return 所有数据源配置的列表
     */
    @GetMapping
    public ResponseEntity<List<DataSourceConfigDTO>> getAllDataSourceConfigs() {
        List<DataSourceConfigDTO> configs = dataSourceConfigService.getAllDataSourceConfigs();
        return ResponseEntity.ok(configs);
    }

    /**
     * 根据ID删除数据源配置
     *
     * @param id 数据源配置ID
     * @return 无内容响应
     */
    @DeleteMapping("/{id}")
    public ResponseEntity<Void> deleteDataSourceConfig(@PathVariable Long id) {
        dataSourceConfigService.deleteDataSourceConfig(id);
        return ResponseEntity.noContent().build();
    }
}





